package binarytree

func LevelOrderTraversalSelf(root *TreeNode) []int {
	// 层序遍历，主要就是有一个辅助队列
	// 每遍历一层，就把本层节点的左右节点扔到队列里，供下次遍历使用
	if root == nil {
		return nil
	}

	queue := []*TreeNode{root}
	result := []int{}

	for len(queue) > 0 {
		// 出队列
		top := queue[0]
		queue = queue[1:]
		result = append(result, top.Val)

		// 左右子节点入队列
		if top.Left != nil {
			queue = append(queue, top.Left)
		}
		if top.Right != nil {
			queue = append(queue, top.Right)
		}
	}

	return result
}
